// 导入自定义的 ajax 模块和 isLogin 函数，用于发送异步请求和检查用户登录状态
import { ajax, isLogin } from '../utils/ajax.js';

// 导入 jQuery 库，用于 DOM 操作和事件处理
import '../lib/jquery.js';

// 导入正则表达式测试函数，用于验证用户输入的数据格式
import { nickTest, sexTest, ageTest } from '../utils/reg.js';

// 立即执行的异步函数，用于初始化页面逻辑
(async () => {
    // 调用 isLogin 函数检查用户登录状态，并获取用户信息和令牌
    let { status, user, token } = await isLogin();
    
    // 如果用户未登录（status 不等于 1），提示用户登录并重定向到登录页面
    if (status != 1) {
        alert('请先登录！');
        location.href = './login.html';
    }

    // 封装显示错误信息的函数，使用 alert 弹出消息
    const showAlert = (message) => alert(message);

    // 使用用户信息填充页面中的输入框
    $('.username').val(user.username); // 设置用户名输入框的值
    $('.age').val(user.age); // 设置年龄输入框的值
    $('.gender').val(user.gender); // 设置性别输入框的值
    $('.nickname').val(user.nickname); // 设置昵称输入框的值

    // 为表单绑定提交事件
    $('form').on('submit', async e => {
        // 阻止表单的默认提交行为
        e.preventDefault();

        // 获取用户输入的数据，并去除字符串前后的空白字符
        const age = $('.age').val().trim();
        const gender = $('.gender').val().trim();
        const nickname = $('.nickname').val().trim();

        // 验证输入数据是否为空
        if (!age) return showAlert('年龄不能为空');
        if (!gender) return showAlert('性别不能为空');
        if (!nickname) return showAlert('昵称不能为空');

        // 使用正则表达式验证输入数据的格式
        if (!ageTest(age)) return showAlert('年龄格式错误');
        if (!sexTest(gender)) return showAlert('性别格式错误');
        if (!nickTest(nickname)) return showAlert('昵称格式错误');

        // 准备发送到服务器的数据
        const data = { id: user.id, age, gender, nickname };

        // 发送异步 POST 请求到 '/users/update' 接口，请求更新用户信息
        try {
            const { data: { code } } = await ajax.post('/users/update', data, {
                headers: { authorization: token } // 将用户令牌添加到请求头
            });
            // 如果服务器响应码不等于 1，表示更新失败，抛出异常
            if (code != 1) throw new Error('修改失败');
            // 更新成功，提示用户
            showAlert('修改成功');
        } catch (error) {
            // 捕获并提示更新过程中发生的任何错误
            showAlert('修改失败：' + error.message);
        }
    });
})();